package com.opencore.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList;

import com.opencore.dto.DteFileProcesoDTO;
import com.opencore.util.ConexionSQL;

public class DteFileProceso {
	private static PreparedStatement ps = null;
	private static ResultSet rs = null;
	private static Connection con = null;

	public static ArrayList<DteFileProcesoDTO> getAll() throws SQLException, ClassNotFoundException{
		con = ConexionSQL.crearConeccionSQL();
		ArrayList<DteFileProcesoDTO>  archivos = new ArrayList<DteFileProcesoDTO>();
		try {
			ps = con.prepareStatement("Select ID_DTE_FILE_PROC, NOMBRE_ARCHIVO, RUTA, PROCESADO_S_N, FECHA_SISTEMA FROM DTE_FILE_PROCESO");
			rs = ps.executeQuery();

			while(rs.next()) {
				DteFileProcesoDTO linea = new DteFileProcesoDTO();
				linea.setIdDteFileProceso(rs.getInt("ID_DTE_FILE_PROC"));
				linea.setNombreArchivo(rs.getString("NOMBRE_ARCHIVO"));
				linea.setRuta(rs.getString("RUTA"));
				linea.setProcesado(rs.getString("PROCESADO_S_N"));
				linea.setFechaSistema(rs.getString("FECHA_SISTEMA"));
				archivos.add(linea);
			}			
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			if(rs != null)
				rs.close();
			if(ps != null)
				ps.close();
			ConexionSQL.cierraConeccion();
		}
		return archivos;
	}


	public static boolean insert(ArrayList<DteFileProcesoDTO> archivo) throws Exception{
		boolean exito = false;
		try {
			con = ConexionSQL.crearConeccionSQL();
			int correlativo = ConexionSQL.getLastRow("ID_DTE_FILE_PROC", "DTE_FILE_PROCESO");

			StringBuilder insert = new StringBuilder();
			insert.append("insert into DTE_FILE_PROCESO (ID_DTE_FILE_PROC, NOMBRE_ARCHIVO, RUTA,PROCESADO_S_N, FECHA_SISTEMA) values (?,?,?,?,?)");			
			ps = con.prepareStatement(insert.toString());
			for (int i = 0; i < archivo.size(); i++) {
				ps.setInt(1, correlativo);
				ps.setString(2, archivo.get(i).getNombreArchivo());
				ps.setString(3, archivo.get(i).getRuta());
				ps.setString(4, archivo.get(i).getProcesado());
				ps.setTimestamp(5, new Timestamp(System.currentTimeMillis()));
				ps.addBatch();
				correlativo++;
			}
			ps.executeBatch();
			ps.clearBatch();
			exito = true;
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			if(rs != null)
				rs.close();
			if(ps != null)
				ps.close();
			ConexionSQL.cierraConeccion();
		}
		return exito;
	}

	public static boolean update(DteFileProcesoDTO archivo) throws Exception{
		boolean exito = false;
		try {
			con = ConexionSQL.crearConeccionSQL();
			StringBuilder update = new StringBuilder();
			update.append("update DTE_FILE_PROCESO set NOMBRE_ARCHIVO = ?, RUTA = ?, PROCESADO_S_N = ?, FECHA_SISTEMA = ? where ID_DTE_FILE_PROC="+archivo.getIdDteFileProceso());
			ps = con.prepareStatement(update.toString());
			ps.setString(1, archivo.getNombreArchivo());
			ps.setString(2, archivo.getRuta());
			ps.setString(3, archivo.getProcesado());
			ps.setTimestamp(4, new Timestamp(System.currentTimeMillis()));
			ps.executeUpdate();

			exito = true;
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			if(rs != null)
				rs.close();
			if(ps != null)
				ps.close();
			ConexionSQL.cierraConeccion();
		}
		return exito;
	}

	public static boolean validaFile(DteFileProcesoDTO archivo) throws Exception{
		boolean exito = false;
		try {
			con = ConexionSQL.crearConeccionSQL();
			StringBuilder update = new StringBuilder();
			update.append("update DTE_FILE_PROCESO set NOMBRE_ARCHIVO = ?, RUTA = ?, PROCESADO_S_N = ?, FECHA_SISTEMA = ? where ID_DTE_FILE_PROC="+archivo.getIdDteFileProceso());
			ps = con.prepareStatement(update.toString());
			ps.setString(1, archivo.getNombreArchivo());
			ps.setString(2, archivo.getRuta());
			ps.setString(3, archivo.getProcesado());
			ps.setTimestamp(4, new Timestamp(System.currentTimeMillis()));
			ps.executeUpdate();

			exito = true;
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			if(rs != null)
				rs.close();
			if(ps != null)
				ps.close();
			ConexionSQL.cierraConeccion();
		}
		return exito;
	}

	//main para pruebas unitarias
	//			public static void main(String[] args) throws Exception {
	//		
	//				try {
	//					//get all
	//					List<DteFileProcesoDTE> dteLectura = getAll();
	//					for (DteFileProcesoDTE dteLect : dteLectura) {
	//						System.out.println(dteLect.toString());
	//					}
	//	
	//				//insert
	//				ArrayList<DteFileProcesoDTO> archivo = new ArrayList<DteFileProcesoDTO>();
	//				DteFileProcesoDTO linea = new DteFileProcesoDTO();
	//				linea.setNombreArchivo("prueba");
	//				linea.setRUTA("C:/hola/soy/un/RUTA");
	//				linea.setArchivo("soy un texto de dte");
	//				archivo.add(linea);
	//				System.out.println(insert(archivo));
	//
	//			//update
	//			DteFileProcesoDTE linea2 = new DteFileProcesoDTE();
	//			linea2.setIdDteLectura(1);
	//			linea2.setNombreArchivo("prueba");
	//			linea2.setRUTA("C:/hola/soy/un/RUTA");
	//			linea2.setArchivo("soy un texto de dte mas largo");
	//			System.out.println(update(linea2));
	//
	//				} catch (ClassNotFoundException e) {
	//					e.printStackTrace();
	//				} catch (SQLException e) {
	//					e.printStackTrace();
	//				}
	//			}
}
